package com.example.springbootdemo2023.bus.staff.controller;



import cn.hutool.extra.pinyin.PinyinUtil;
import com.example.springbootdemo2023.bus.account.dto.Account;
import com.example.springbootdemo2023.bus.staff.dto.Staff;
import com.example.springbootdemo2023.bus.staff.service.IStaffService;
import com.example.springbootdemo2023.core.annotations.MySysLog;
import com.example.springbootdemo2023.core.annotations.MySysLogOpration;
import com.example.springbootdemo2023.core.dto.MyPageBand;
import com.example.springbootdemo2023.core.dto.MyPager;
import com.example.springbootdemo2023.core.dto.MyResult;
import com.example.springbootdemo2023.core.util.MySysUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 *
 * 管理员管理
 * @author GaoJingBo
 * @since 2023-04-04
 */
@RestController
@RequestMapping("/staff")
@Slf4j
@Api(tags = "管理员管理接口")
public class StaffController {

    @Resource(name = "staffServiceImpl")
    private IStaffService staffService;

    @GetMapping("/page")
    @ApiOperation("管理员管理-分页信息")
    @MySysLog(modelName="管理员管理",methodDesc = "分页信息",methodType = MySysLogOpration.GET)
    public MyResult pages(Staff dto, MyPageBand pager){

        log.debug("--管理员管理：分页信息");
        MyResult result = new MyResult();

        try {

            MyPager<Staff> res = staffService.pages(dto,pager);

            result.setMsg("查询成功！");
            result.setData(res);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("分页查询异常！");
        }

        return result;
    }

    @GetMapping("/getByID")
    @ApiOperation("管理员管理-获取信息通过主键字段值")
    @MySysLog(modelName="管理员管理",methodDesc = "获取信息通过主键字段值",methodType = MySysLogOpration.GET)
    public MyResult getByID(String id){

        log.debug("--管理员管理：获取信息通过主键字段值");
        MyResult result = new MyResult();

        try {

            result.setMsg("查询成功！");
            result.setData(staffService.getById(id));

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("分页查询异常！");
        }

        return result;
    }

    @PostMapping("/add")
    @ApiOperation("管理员管理-添加")
    @MySysLog(modelName="管理员管理",methodDesc = "添加",methodType = MySysLogOpration.POST)
    public MyResult add(@RequestBody Staff dto){

        log.debug("--管理员管理：添加");
        MyResult result = new MyResult();

        try {

            // 生成编号
            dto.setCode(MySysUtil.generateCode("STAFF",dto.getName()));
            // 生成拼音
            dto.setNamePingYing(PinyinUtil.getPinyin(dto.getName()));

            staffService.save(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("添加异常！");
        }

        return result;
    }

    @PutMapping("/update")
    @ApiOperation("管理员管理-修改")
    @MySysLog(modelName="管理员管理",methodDesc = "修改",methodType = MySysLogOpration.PUT)
    public MyResult update(@RequestBody Staff dto){

        log.debug("--管理员管理：修改");
        MyResult result = new MyResult();

        try {

            staffService.updateById(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("修改异常！");
        }

        return result;
    }

    @DeleteMapping("/deletes")
    @ApiOperation("管理员管理-删除")
    @MySysLog(modelName="管理员管理",methodDesc = "删除",methodType = MySysLogOpration.DELETE)
    public MyResult deletes(String ids){

        log.debug("--管理员管理：删除");
        MyResult result = new MyResult();

        try {

            List<String> idList = Arrays.asList(ids.split(","));

            staffService.removeByIds(idList);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("删除异常！");
        }

        return result;
    }

    @PostMapping("/granteStaffAccount")
    @ApiOperation("管理员管理-授权账号")
    @MySysLog(modelName="管理员管理",methodDesc = "授权账号",methodType = MySysLogOpration.POST)
    public MyResult granteStaffAccount(@RequestBody Staff dto){

        log.debug("--管理员管理：授权账号");
        MyResult result = new MyResult();

        try {

            result = staffService.granteStaffAccount(dto);

        }catch (Exception e){
            e.printStackTrace();
            result.setCode("9999");
            result.setMsg("删除异常！");
        }

        return result;
    }

}
